/*
 * tab_setup.h
 *
 *  Created on: 15.06.2013
 *      Author: SpirTanol
 */

#ifndef TAB_SETUP_H_
#define TAB_SETUP_H_

#include "events/data_event_listener.h"

// QT
#include <QWidget>

class QCheckBox;
class QComboBox;
class QPushButton;
class QSpinBox;
class QDoubleSpinBox;
class QLineEdit;

class ConfigEvent;
class ConfigPacket;
class DeviceInfo;

class MainWindow;

class TabSetup : public QWidget, public DataEventListener
{
	Q_OBJECT

	QDoubleSpinBox *oDSpinNominalCur; /**< Номинальный ток */
	QSpinBox *oSpinAllowCur; /**< Минимально допустимый ток двигателя */
	QSpinBox *oSpinOverloadCur; /**< Порог срабатывания защиты от перегрузки, кратность тока */
	QSpinBox *oSpinOverloadTime; /**< Время реакции защиты от перегрузки */
	QSpinBox *oSpinImbalance; /**< Порог отключения по перекосу токов фаз */
	QSpinBox *oSpinDelaySwitchOn; /**< Задержка включения */
	QSpinBox *oSpinAllowCrashPhase; /**< Допустимое количество оборваных фаз */
	QSpinBox *oSpinTimeOff; /**< Время отключения при двухкратной перегрузке */
	QSpinBox *oSpinTresholdTemp100; /**< Порог срабатывания защиты по термодатчику РТ100 */
	QDoubleSpinBox *oDSpinProtectionThresholdOfIdle; /**< Коэффициент коррекции минимально допустимого тока x10: -20 - 20 */

	QCheckBox *oCheckAllowFastProtect; /**< Разрешение быстродействующей защиты */
	QCheckBox *oCheckAutoSwitch; /**< Автоматическое повторное включение */
	QCheckBox *oCheckAllowTempProtect; /**< Разрешение защит по термодатчику РТС */
	QCheckBox *oCheckAllowWetProtect; /**< Разрешение защит по датчику влажности */


	QComboBox *oComboAllowVoltage; /**< Допуск на напряжение питающих фаз */
	QSpinBox *oSpinDelayWork; /**< Продолжительность работы в циклическом режиме */
	QSpinBox *oSpinDelayPause; /**< Продолжительность простоя в циклическом режиме */
	QComboBox *oComboIn1; /**< Выбор функции входа 1 */
	QComboBox *oComboIn2; /**< Выбор функции входа 2 */
	QComboBox *oComboPowerOut; /**< Выбор функции силового выхода */
	QComboBox *oComboAppendOut; /**< Выбор функции дополнительного выхода */
	QSpinBox *oSpinDelaySwitch; /**< Задержка переключения */
	QSpinBox *oSpinTimeProtectOfBiasCurrents; /**< Время срабатывания защиты от перекоса токов (30) */
	QComboBox *oComboProtectionThresholdOfInsulation; /**< Выбор порога срабатывания защиты по сопротивлению изоляции: 0 — 0,55МОм, 1 — 1,1МОм */

	QCheckBox *oCheckAllowRemoteControll; /**< Разрешение дистанционного управления */
	QCheckBox *oCheckTestingPhase; /**< Проверка последовательности фаз питающей сети */
	QCheckBox *oCheckAllowTempProtect100; /**< Разрешение защиты по термодатчику РТ100 */
	QCheckBox *oCheckWorkByTimer; /**< Разрешение циклической работы по таймеру */

	QPushButton *oBtnReadConfig; /**< Считать настройки */
	QPushButton *oBtnWriteConfig; /**< Записать настройки */
	QPushButton *oBtnSetupTime; /**< Настроить время УЗД */

	QPushButton *oBtnResetCrashProtocol; /**< Сброс протокола аварий  */
	QPushButton *oBtnResetWorkProtocol; /**< Сброс протокола работы двигателя */
	QPushButton *oBtnResetWorkTime; /**< Сброс наработки */

	MainWindow *oMainWindow;

	QPushButton *oBtnShowIdlePlot;

	uint oTime;

public:
	TabSetup(MainWindow *mainWindow);
	~TabSetup();

	void onDataEvent(const DataEvent *e); // [virtual]

private:
	void updateData(const ConfigPacket *config);

	void disableButtons();

private slots:
	void onBtnReadConfigClicked();
	void onBtnWriteConfigClicked();
	void onBtnWriteTimeClicked();

	void onBtnResetCrashProtocolClicked();
	void onBtnResetWorkProtocol();
	void onBtnResetWorkTime();

	void onBtnShowIdlePlot();

	/** Проверяет настройки на совместимость и если что то не так, блокирует кнопку записи настроек и пишет предупреждени */
	void onSetupChanged();

};

#endif /* TAB_SETUP_H_ */
